<?php

namespace app\job;

use think\queue\Job;
use think\facade\Log;

class TestJob
{
    /*
    * https://packagist.org/packages/topthink/think-queue
     * 警告：队列任务里不能使用 die()/exit() 函数，会直接导致后续代码流程停掉，出现未明错误
     *
     * php think queue:work --queue=default 运行队列
     * php think queue:listen --queue=defaul 监听队列
     *
     * 发布任务
     * -- 立即执行
     * \think\facade\Queue::push(\app\job\TestJob::class, "test data", 'default');
     *
     * -- $delay 秒后执行
     * \think\facade\Queue::later($delay, \app\job\TestJob::class, "test data", 'default');
     *
     * */

    public function fire(Job $job, string $data)
    {
        Log::channel("job")->info(__CLASS__." 任务开始");
        Log::channel("job")->info("job data: ".$data);

        if ($job->attempts() > 3) Log::channel("job")->warning(__CLASS__." 已重试:{$job->attempts()} 次");
        // 执行成功后删除任务
        $job->delete();

        Log::channel("job")->info(__CLASS__." 任务结束");
        // 重新发布任务
        // $job->release($delay);// $delay 为延迟时间
    }// fire() end

    public function failed(string $data)
    {
        // 任务到达最大重试次数后，失败了
        Log::channel("job")->error($data);
        Log::channel("job")->error(__CLASS__." 任务失败");
    }// failed() end
}